#ifndef MOUSE_H_
#define MOUSE_H_

#include "pantalla.h"

#define FONDO_MOUSE 0x27
#define ESCALA_MOUSE_X 2
#define ESCALA_MOUSE_Y 6

Point posMouse;				// coordenadas del mouse en unidades relativas a informacion de paquetes
Point posPantallaActual;	// coordenadas del mouse en pantalla 80x25
Point posSeleccionInicial;	// coordenada de inicio de area de seleccion
Point posSeleccionFinal;	// coordenada de fin de area de seleccion

int copiando;
char bufferMouse[COLUMNAS*FILAS];


/*
 * Inicializa el mouse por hardware y setea las variables que se van a usar
 */
void inicializarMouse();

/*
 * Procesa el codigo recibido en cada paquete del mouse (3 paquetes por accion)
 */
void procMouse(unsigned char code);

/*
 * Realiza los swaps si son necesarios para que la coordenada inicial sea inferior a la final en X e Y
 */
void ordenar(Point *inicial, Point *final);

/*
 * Dibuja el rectangulo de seleccion tomando las coordenadas inicial y final globales
 */
void setSeleccionMouse();

/*
 * Borra el rectangulo de seleccion tomando las coordenadas inicial y final globales
 */
void unsetSeleccionMouse();

/*
 * Intercambia dos variables
 */
void swap(int *n1, int *n2);

/*
 * Dada un area determinada por dos coordenadas setea el byte de atributo de cada posicion de pantalla
 * en ese area
 */
void asignarAtributoArea(Point inicial,Point final,char atr);

/*
 * Setea el byte de atributo de una posicion de pantalla dando las coordenadas
 */
void asignarAtributoPos(int col, int fila, char atr);

/*
 * Devuelve si la coordenada del mouse esta incluida en el area de seleccion actual
 */
int mouseEnSeleccion();

/*
 * Dibuja el mouse
 */
void setMouse();

/*
 * Borra el mouse
 */
void unsetMouse();

/*
 * Funcion auxiliar para inicializar el mouse
 */
unsigned char mouse_read();

/*
 * Funcion auxiliar para inicializar el mouse
 */
void mouse_write(unsigned char a_write);

/*
 * Funcion auxiliar para inicializar el mouse
 */
void mouse_wait(unsigned char type);


#endif /* MOUSE_H_ */
